﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProjectEulerSolutions
{
    /*
     * 
     * A unit fraction contains 1 in the numerator. The decimal representation of the unit fractions with denominators 2 to 10 are given:

    1/2	= 	0.5
    1/3	= 	0.(3)
    1/4	= 	0.25
    1/5	= 	0.2
    1/6	= 	0.1(6)
    1/7	= 	0.(142857)
    1/8	= 	0.125
    1/9	= 	0.(1)
    1/10	= 	0.1

Where 0.1(6) means 0.166666..., and has a 1-digit recurring cycle. It can be seen that 1/7 has a 6-digit recurring cycle.

Find the value of d < 1000 for which 1/d contains the longest recurring cycle in its decimal fraction part.

     * 
     * 
     * 
     * 
     * */
    class Problem26
    {
        public static string Calculate()
        {

            int max = 0;
            int index = 0;

            for (int i = 2; i < 1000; i++)
            {
                int x = countRepeatingDigits(1,i);

                if(x>max){
                    max = x;
                    index = i;
                }
            }




            return index.ToString();
        }

        public static int countRepeatingDigits(int nominator, int denominator)
        {
            int count = 0;

            //int numDigitsN = (int)Math.Ceiling(Math.Log10(nominator));
            //int numDigitsD = (int)Math.Ceiling(Math.Log10(denominator));

            List<int> coeficients = new List<int>();

            int totalDigits = 0;
            int latest = nominator;

            while (latest != 0)
            {         
                while (latest < denominator)
                {
                    latest *= 10;
                    totalDigits++; //nula
                }

                if (coeficients.Contains(latest))
                {
                    int index = coeficients.IndexOf(latest);
                    return coeficients.Count - index;
                } 

                coeficients.Add(latest);
                latest = latest % denominator;
            }

            return count;
        }
    }
}
